/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.io.File;
import java.io.FileInputStream;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
//import javax.jms.Session;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.cip.esymons.eventos.adapaters.Fechas;
import org.cip.esymons.eventos.adapaters.RutaCarpetaReporte;
import org.cip.esymons.eventos.bc.AsistenciaAlumnoDelegate;
import org.cip.esymons.eventos.bc.AsistenciaDelegate;
import org.cip.esymons.eventos.bc.CalificacionModuloDelegate;
import org.cip.esymons.eventos.bc.ConsejoDepartamentalDelegate;
import org.cip.esymons.eventos.bc.CursoDelegate;
import org.cip.esymons.eventos.bc.EntregaCertificadoDelegate;
import org.cip.esymons.eventos.bc.EventoDelegate;
import org.cip.esymons.eventos.bc.FormatoCertificadoDelegate;
import org.cip.esymons.eventos.bc.ModuloCursoDelegate;
import org.cip.esymons.eventos.bc.PreEventoDelegate;
import org.cip.esymons.eventos.be.AsistenciaAlumno;
import org.cip.esymons.eventos.be.AsistenciaParticipante;
import org.cip.esymons.eventos.be.CalificacionModulo;
import org.cip.esymons.eventos.be.Curso;
import org.cip.esymons.eventos.be.EntregaCertificado;
import org.cip.esymons.eventos.be.Evento;
import org.cip.esymons.eventos.be.FormatoCertificado;
import org.cip.esymons.eventos.be.ModuloCurso;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.general.be.ConsejoDepartamental;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.Utiles;

/**
 *
 * @author Lizardo Rios
 */
public class JasperController {

    EventoDelegate delegadoEvento;
    PreEventoDelegate delegadoPreevento;
    AsistenciaAlumnoDelegate delegadoAsistenciaAlumno;
    AsistenciaDelegate delegadoAsistenciaParticipante;
    EntregaCertificadoDelegate delegadoEntregaCertificado;
    CursoDelegate delegadoCurso;
    CalificacionModuloDelegate delegadoCalificacionModulo;
    List<Preevento> listaEvento;
    List<AsistenciaAlumno> listaAsistenciaAlumnos;
    List<AsistenciaParticipante> listaAsistenciaParticipante;
    List<EntregaCertificado> listaEntregaCertificado;
    List<Curso> listaVancanteCurso;
    List<Preevento> listaPreevento;
    List<CalificacionModulo> listaNotaxModulo;

    Integer anio;
    int mes;
    boolean tipoEvento;
    Integer eveCodigo;
    Integer forCodigo;
    Integer modCodigo;
    Integer reporte;
    String nombreJasper;

    /****************************** Constructor ******************************/
    public JasperController() {
        listaEvento = new ArrayList<Preevento>();
        listaAsistenciaAlumnos = new ArrayList<AsistenciaAlumno>();
        listaAsistenciaParticipante = new ArrayList<AsistenciaParticipante>();
        listaEntregaCertificado= new ArrayList<EntregaCertificado>();
        listaVancanteCurso = new ArrayList<Curso>();
        listaPreevento = new ArrayList<Preevento>();
        listaNotaxModulo = new ArrayList<CalificacionModulo>();
        anio = Utiles.anioVigente();
        mes = 0;
        tipoEvento = false;
        reporte = 0;
        nombreJasper = "";
    }

    /************************** Setters and Getters **************************/
    public Integer getEveCodigo() {
        return eveCodigo;
    }
    public void setEveCodigo(Integer eveCodigo) {
        this.eveCodigo = eveCodigo;
    }

    public Integer getForCodigo() {
        return forCodigo;
    }

    public void setForCodigo(Integer forCodigo) {
        this.forCodigo = forCodigo;
    }

    public Integer getModCodigo() {
        return modCodigo;
    }
    public void setModCodigo(Integer modCodigo) {
        this.modCodigo = modCodigo;
    }

    

    public List<AsistenciaAlumno> getListaAsistenciaAlumnos() {
        return listaAsistenciaAlumnos;
    }

    public List<AsistenciaParticipante> getListaAsistenciaParticipante() {
        return listaAsistenciaParticipante;
    }

    public void setListaAsistenciaAlumnos(List<AsistenciaAlumno> listaAsistenciaAlumnos) {
        this.listaAsistenciaAlumnos = listaAsistenciaAlumnos;
    }

    public void setListaAsistenciaParticipante(List<AsistenciaParticipante> listaAsistenciaParticipante) {
        this.listaAsistenciaParticipante = listaAsistenciaParticipante;
    }

    public List<EntregaCertificado> getListaEntregaCertificado() {
        return listaEntregaCertificado;
    }

    public void setListaEntregaCertificado(List<EntregaCertificado> listaEntregaCertificado) {
        this.listaEntregaCertificado = listaEntregaCertificado;
    }

    public List<Curso> getListaVancanteCurso() {
        return listaVancanteCurso;
    }

    public void setListaVancanteCurso(List<Curso> listaVancanteCurso) {
        this.listaVancanteCurso = listaVancanteCurso;
    }

    public List<CalificacionModulo> getListaNotaxModulo() {
        return listaNotaxModulo;
    }

    public void setListaNotaxModulo(List<CalificacionModulo> listaNotaxModulo) {
        this.listaNotaxModulo = listaNotaxModulo;
    }


    

    public CursoDelegate getDelegadoCurso() {
        return delegadoCurso;
    }

    public void setDelegadoCurso(CursoDelegate delegadoCurso) {
        this.delegadoCurso = delegadoCurso;
    }



    

    public EventoDelegate getDelegadoEvento() {
        return delegadoEvento;
    }

    public EntregaCertificadoDelegate getDelegadoEntregaCertificado() {
        return delegadoEntregaCertificado;
    }

    public boolean getTipoEvento() {
        return tipoEvento;
    }
    public void setTipoEvento(boolean tipoEvento) {
        this.tipoEvento = tipoEvento;
    }

    public String getNombreJasper() {
        return nombreJasper;
    }
    public void setNombreJasper(String nombreJasper) {
        this.nombreJasper = nombreJasper;
    }

    public Integer getAnio() {
        return anio;
    }
    public void setAnio(Integer anio) {
        this.anio = anio;
    }

    public Integer getReporte() {
        return reporte;
    }
    public void setReporte(Integer reporte) {
        this.reporte = reporte;
    }

    public int getMes() {
        System.out.println("Año: " + anio);
        System.out.println("Mes: " + mes);
        System.out.println("eveCodigo: " + eveCodigo);
        return mes;
    }
    public void setMes(int mes) {
        this.mes = mes;
    }

    public List<Preevento> getListaEvento() {
        return listaEvento;
    }
    public void setListaEvento(List<Preevento> listaEvento) {
        this.listaEvento = listaEvento;
    }

    public List<Preevento> getListaPreevento() {
        return listaPreevento;
    }
    public void setListaPreevento(List<Preevento> listaPreevento) {
        this.listaPreevento = listaPreevento;
    }



    /******************************** Metodos ********************************/
    public String buscarEventos() {
        try {
            delegadoEvento = new EventoDelegate();
            Fechas fecha = new Fechas();
            Date fechaInicio = fecha.fechaInicio(anio, mes);
            Date fechaFin = fecha.fechaFin(anio, mes);
            listaEvento = delegadoEvento.listarEventosXAnioXMes(fechaInicio, fechaFin);
        } catch (IllegalArgumentException ar) {
            mostrarMensaje("ERROR: ", "Argumentos incorrectos", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ar.getMessage(), FacesMessage.SEVERITY_FATAL);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Paso de Fechas Incorrectas", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String buscarAsistencias() {
        try {
            if (tipoEvento) {
                delegadoAsistenciaAlumno = new AsistenciaAlumnoDelegate();
                listaAsistenciaAlumnos = delegadoAsistenciaAlumno.listaAsistenciaAlumno(eveCodigo);
            } else {
                delegadoAsistenciaParticipante = new AsistenciaDelegate();
                listaAsistenciaParticipante = delegadoAsistenciaParticipante.listaAsistenciaParticipante(eveCodigo);
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Paso de Fechas Incorrectas", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String buscarEntregaCertficado() {
        try {
            delegadoEntregaCertificado = new EntregaCertificadoDelegate();
            eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
            forCodigo = (forCodigo == null) ? 0 : forCodigo;
            listaEntregaCertificado = delegadoEntregaCertificado.listarCertificados(eveCodigo, forCodigo);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarEntregaCertificado", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String buscarCertificados() {
        return buscarEntregaCertficado();
    }

    public String buscarDiplomados() {
        return buscarCertificados();
    }

    public String buscarCertificadosXModulo() {
        try {
            delegadoEntregaCertificado = new EntregaCertificadoDelegate();
            eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
            modCodigo = (modCodigo == null) ? 0 : modCodigo;
            forCodigo = (forCodigo == null) ? 0 : forCodigo;
            listaEntregaCertificado = delegadoEntregaCertificado.listarCertificados(eveCodigo, forCodigo, modCodigo);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarCertificadosXModulo", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String buscarVacantesCursos() {
        try {
            delegadoCurso = new CursoDelegate();
            listaVancanteCurso = delegadoCurso.listarVacantes();
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarCursos", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String buscarPreevento() {
        try {
            delegadoPreevento = new PreEventoDelegate();
            listaPreevento = delegadoPreevento.findAll();
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarPreevento", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String buscarNotasxModulo() {
        try {
            System.out.println("eveCodigo: " + eveCodigo);
            System.out.println("modCodigo: " + modCodigo);
            eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
            modCodigo = (modCodigo == null) ? 0 : modCodigo;
            delegadoCalificacionModulo = new CalificacionModuloDelegate();
            listaNotaxModulo = delegadoCalificacionModulo.listarCalificaciones(eveCodigo, modCodigo);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarNotasxModulo", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }
    
    public String validarAnioMes() {
        anio = (anio == 0) ? 2009 : anio;
        mes = (mes == 0) ? 8 : mes;
        return null;
    }

    public String validarCodigoEvento() {
        eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
        return null;
    }

    @SuppressWarnings("static-access")
    //exporta reporte de eventos en pdf
    public String exportar() {
        try {
            //capturar parametros
            HttpServletRequest request =  ControladorAbstracto.getRequest();
            HttpSession sesion = request.getSession();
            reporte = (sesion.getAttribute("sReporte") != null) ? (Integer)sesion.getAttribute("sReporte") : 0;
            Boolean tipo = (sesion.getAttribute("sTipo") != null) ? (Boolean)sesion.getAttribute("sTipo") : false;
            if (tipo) {
                //PERSONALIZADO
                if (tipoEvento) //ALUMNO
                    nombreJasper = (sesion.getAttribute("sJasper2") != null) ? (String)sesion.getAttribute("sJasper2") : "";
                else            //PARTICIPANTE
                    nombreJasper = (sesion.getAttribute("sJasper") != null) ? (String)sesion.getAttribute("sJasper") : "";
            } else {
                //NORMAL
                nombreJasper = (sesion.getAttribute("sJasper") != null) ? (String)sesion.getAttribute("sJasper") : "";
            }

            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";

            rutaJasper = ruta.getRutaJaspers() + nombreJasper + ".jasper";
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRuta() + nombreJasper + ".pdf";    //ruta windows prueba
            rutaPDF = ruta.getRutaPDF() + nombreJasper + ".pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif

            rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            
            ConsejoDepartamental consejo = new ConsejoDepartamental();
            ConsejoDepartamentalDelegate delegadoConsejo = new ConsejoDepartamentalDelegate();
            consejo = delegadoConsejo.buscarActivo();
            String logoReporte = ruta.getRutaLogo();
            String nombreConsejo = consejo.getCdeDescripcion();
            String abrevConcejo = consejo.getCdeAbreviatura();
            consejo = null;
            delegadoConsejo = null;
            Map parametros = new HashMap();
            parametros.put("nombreConsejo", nombreConsejo);
            parametros.put("abrevConsejo", abrevConcejo);
            parametros.put("logoReporte", logoReporte);
            File entrada = new File(rutaJasper);
            JasperPrint print;
            switch (reporte) {
                case 0: //rptEvento.jasper
                    if (listaEvento.size() > 0) {
                        print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaEvento));
                        if (ruta.generarPDF(rutaPDF, print)) {}
                    }
                    break;

                case 1: //rptAsistencias.jasper
                    //preguntar si es para alumno o participantes
                    if (tipoEvento) {
                        if (listaAsistenciaAlumnos.size() > 0) {
                            print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaAsistenciaAlumnos));
                            if (ruta.generarPDF(rutaPDF, print)) {}
                        }
                    } else {
                        if (listaAsistenciaParticipante.size() > 0) {
                            print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaAsistenciaParticipante));
                            if (ruta.generarPDF(rutaPDF, print)) {}
                        }
                    }
                    
                    break;

                case 2: //rptFormato.jasper
                    if (listaEntregaCertificado.size() > 0) {
                        print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaEntregaCertificado));
                        if (ruta.generarPDF(rutaPDF, print)) {}
                    }
                    break;

                case 3: //rptPresupuestoEvento.jasper

                    break;

                case 4: //rptVacantesCurso.jasper
                    if (listaVancanteCurso.size() > 0) {
                        print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaVancanteCurso));
                        if (ruta.generarPDF(rutaPDF, print)) {}
                    }
                    break;

                case 5: //rptPreevento.jasper
                    if (listaPreevento.size() > 0) {
                        print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaPreevento));
                        if (ruta.generarPDF(rutaPDF, print)) {}
                    }
                    break;

                case 6: //rptNotas.jasper
                    if (listaNotaxModulo.size() > 0) {
                        print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaNotaxModulo));
                        if (ruta.generarPDF(rutaPDF, print)) {}
                    }
                    break;

                case 7: //rptFormatosDiplomados.jasper
                    if (listaEntregaCertificado.size() > 0) {
                        print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaEntregaCertificado));
                        if (ruta.generarPDF(rutaPDF, print)) {}
                    }
                    break;

                case 8: //rptFormatoCertificados.jasper
                    if (listaEntregaCertificado.size() > 0) {
                        print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaEntregaCertificado));
                        if (ruta.generarPDF(rutaPDF, print)) {}
                    }
                    break;
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al generar el reporte", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String inicializarReporteAsistencia() {
        mes = 0;
        eveCodigo = 0;
        listaAsistenciaAlumnos = new ArrayList<AsistenciaAlumno>();
        listaAsistenciaParticipante = new ArrayList<AsistenciaParticipante>();
        return null;
    }

    public SelectItem[] getComboEventos() {
        try {
            List<Preevento> lista = new ArrayList<Preevento>();
            Fechas fecha = new Fechas();
            Date fechaInicio = fecha.fechaInicio(anio, mes);
            Date fechaFin = fecha.fechaFin(anio, mes);
            delegadoEvento = new EventoDelegate();
            lista = delegadoEvento.listaEventosPorPeriodo(fechaInicio, fechaFin);
            //lista = delegadoEvento.listaEventosPeriodo(fechaInicio, fechaFin);
            SelectItem[] comboEvento = new SelectItem[lista.size()];
            for (int i = 0; i < lista.size(); i++) {
                String abrev = "";
                if (lista.get(i).getPreNombre().length() > 45) {
                    abrev = lista.get(i).getPreNombre().substring(0, 45);
                } else {
                    abrev = lista.get(i).getPreNombre();
                }
                comboEvento[i] = new SelectItem(lista.get(i).getPreCodigo(), abrev);
            }
            return comboEvento;

        } catch (IllegalArgumentException ar) {
            mostrarMensaje("ERROR: ", "Argumentos incorrectos", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ar.getMessage(), FacesMessage.SEVERITY_FATAL);
            SelectItem[] comboEvento = new SelectItem[1];
            comboEvento[0] = new SelectItem(new Evento(), "No hay Eventos");
            return comboEvento;
        } catch (Exception e) {
            //Mensaje al usuario
            List<Evento> lista = new ArrayList<Evento>();
            SelectItem[] comboEvento = new SelectItem[1];
            comboEvento[0] = new SelectItem(new Evento(), "No hay Eventos");
            return comboEvento;
        }
    }

    public SelectItem[] getComboCursos() {
        try {
            List<Preevento> lista = new ArrayList<Preevento>();
            Fechas fecha = new Fechas();
            Date fechaInicio = fecha.fechaInicio(anio, mes);
            Date fechaFin = fecha.fechaFin(anio, mes);
            delegadoEvento = new EventoDelegate();
            lista = delegadoEvento.listaCursoPorPeriodo(fechaInicio, fechaFin);
            SelectItem[] comboCurso = new SelectItem[lista.size()];
            for (int i = 0; i < lista.size(); i++) {
                String abrev = "";
                if (lista.get(i).getPreNombre().length() > 45) {
                    abrev = lista.get(i).getPreNombre().substring(0, 45);
                } else {
                    abrev = lista.get(i).getPreNombre();
                }
                comboCurso[i] = new SelectItem(lista.get(i).getPreCodigo(), abrev);
            }
            return comboCurso;

        } catch (IllegalArgumentException ar) {
            mostrarMensaje("ERROR: ", "Argumentos incorrectos", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ar.getMessage(), FacesMessage.SEVERITY_FATAL);
            SelectItem[] comboEvento = new SelectItem[1];
            comboEvento[0] = new SelectItem(new Evento(), "No hay Eventos");
            return comboEvento;
        } catch (Exception e) {
            //Mensaje al usuario
            List<Evento> lista = new ArrayList<Evento>();
            SelectItem[] comboEvento = new SelectItem[1];
            comboEvento[0] = new SelectItem(new Evento(), "No hay Eventos");
            return comboEvento;
        }
    }

    public SelectItem[] getComboFormatoCertificados() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            //codigoEvento = 3; //borrar esta linea
            System.out.println("codigoEvento: " + eveCodigo);
            FormatoCertificadoDelegate delegadoFormatoCertificado = new FormatoCertificadoDelegate();
            List<FormatoCertificado> listaFormatos = delegadoFormatoCertificado.listarFormatosXEvento(eveCodigo);
            selects = new SelectItem[listaFormatos.size()];
            int cont = 0;
            for (FormatoCertificado formato : listaFormatos) {
                SelectItem item = new SelectItem(formato.getForCodigo(), formato.getForNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen formatos certificados");
            selects[0] = item;
            return selects;
        }
    }

    public SelectItem[] getComboModulos() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            System.out.println("eveCodigo: " + eveCodigo);
            ModuloCursoDelegate delegadoModuloCurso = new ModuloCursoDelegate();
            //List<ModuloCurso> listaModulos = delegadoModuloCurso.listarModuloXCurso(eveCodigo);
            List<ModuloCurso> listaModulos = delegadoModuloCurso.listarModulo(eveCodigo);
            selects = new SelectItem[listaModulos.size()];
            int cont = 0;
            for (ModuloCurso modulos : listaModulos) {
                SelectItem item = new SelectItem(modulos.getModCodigo(), modulos.getModNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen modulos");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }
}
